package com.hjimi.ski.utils.update;

import android.app.Activity;

import com.hjimi.ski.R;

import org.lzh.framework.updatepluginlib.base.DownloadCallback;
import org.lzh.framework.updatepluginlib.base.DownloadNotifier;
import org.lzh.framework.updatepluginlib.impl.DefaultDownloadNotifier;
import org.lzh.framework.updatepluginlib.model.Update;

import java.io.File;
import java.text.DecimalFormat;

/**
 * <p>
 *     很多小伙伴提意见说需要一个下载时在通知栏进行进度条显示更新的功能。
 *     此类用于提供此种需求的解决方案。以及如何对其进行定制。满足任意场景使用
 *     默认使用参考：{@link DefaultDownloadNotifier}
 * </p>
 */
public class NotificationDownloadCreatorMandatory extends DownloadNotifier {
    @Override
    public DownloadCallback create(Update update, Activity activity) {
        // 返回一个UpdateDownloadCB对象用于下载时使用来更新界面。
        return new NotificationCB(activity);
    }


    private static class NotificationCB implements DownloadCallback {

        private final Dialog_updateProgress customPopWindow_updateProgress;
        int preProgress;

        NotificationCB (Activity activity) {


            customPopWindow_updateProgress   =  new Dialog_updateProgress(activity, R.style.CustomDialogOne);
            customPopWindow_updateProgress.setCancelable(false);
            customPopWindow_updateProgress.show();
        }

        @Override
        public void onDownloadStart() {
        }

        @Override
        public void onDownloadComplete(File file) {
            // 下载完成的回调。运行于主线程
//            manager.cancel(id);
            customPopWindow_updateProgress.dismiss();
        }

        @Override
        public void onDownloadProgress(long current, long total) {
            customPopWindow_updateProgress.setmText(FormetFileSize(total));

            // 下载过程中的进度信息。在此获取进度信息。运行于主线程
            int progress = (int) (current * 1f / total * 100);
            // 过滤不必要的刷新进度
            if (preProgress < progress) {
                preProgress = progress;
                customPopWindow_updateProgress. setProgress(progress);
            }
        }

        @Override
        public void onDownloadError(Throwable t) {
            // 下载时出错。运行于主线程
//            manager.cancel(id);
        }
    }

    /**
     * 说明:文件大小格式化
     * @param fileS
     * @return
     */
    public static String FormetFileSize(long fileS)
    {// 转换文件大小
        DecimalFormat df = new DecimalFormat("#.00");
        String fileSizeString = "";
        if (fileS < 1024)
        {
            fileSizeString = df.format((double) fileS) + "B";
        }
        else if (fileS < 1048576)
        {
            fileSizeString = df.format((double) fileS / 1024) + "K";
        }
        else if (fileS < 1073741824)
        {
            fileSizeString = df.format((double) fileS / 1048576) + "M";
        }
        else
        {
            fileSizeString = df.format((double) fileS / 1073741824) + "G";
        }
        return fileSizeString;
    }
}
